/**
 * 
 */
package com.wilmar.process.core.services.spi;

import java.util.Set;
import com.wilmar.process.entity.Organization;
import com.wilmar.process.entity.Role;
import com.wilmar.process.entity.User;

/**
 * 系统用户服务接口，所有服务都需要指定外部系统名称
 * 
 * @author bobo E-mail:zholibo_java@msn.cn
 * @version 1.0.0 at Jul 29, 2009 5:23:58 PM
 * 
 */
public interface IUserService {

	/**
	 * 获取用户详细信息
	 * 
	 * @param userno
	 *            用户号
	 * @param outSystem
	 *            外部系统名称
	 * @return 用户实体信息
	 */
	public User getDetailUserByUserno(String userno, String outSystem);

	/**
	 * 根据机构实体以及外部系统获取所有的用户列表
	 * 
	 * @param organization
	 *            机构
	 * @param outSystem
	 *            外部系统名称
	 * @return 用户列表
	 */
	public Set<User> getListAllUsersByOrganization(Organization organization,
			String outSystem);

	/**
	 * 根据机构实体、角色实体以及外部系统获取所有用户列表
	 * 
	 * @param organization
	 *            机构
	 * @param role
	 *            角色
	 * @param outSystem
	 *            外部系统名称
	 * @return 用户列表
	 */
	public Set<User> getListAllUsersByOrganizationAndRole(
			Organization organization, Role role, String outSystem);

	/**
	 * 根据机构实体获取机构中所有的直属人员集合
	 * 
	 * @param organization
	 *            机构
	 * @param outSystem
	 *            外部系统名称
	 * @return 用户列表
	 */
	public Set<User> getListUsersByOrganization(Organization organization,
			String outSystem);

	/**
	 * 根据机构实体以及角色实体获取同时满足两者并且直属该机构的人员集合
	 * 
	 * @param organization
	 *            机构
	 * @param role
	 *            角色
	 * @param outSystem
	 *            外部系统名称
	 * @return 用户列表
	 */
	public Set<User> getListUsersByOrganizationAndRole(
			Organization organization, Role role, String outSystem);

	/**
	 * 根据角色实体获取对应的人员集合
	 * 
	 * @param role
	 *            角色
	 * @param outSystem
	 *            外部系统名称
	 * @return 用户列表
	 */
	public Set<User> getListUsersByRole(Role role, String outSystem);

}
